package com.nathan.mq.integration.vender.redismq.annotation;

import com.nathan.mq.integration.constant.MessageModel;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import org.redisson.client.codec.Codec;
import org.redisson.codec.FstCodec;

/**
 * @author
 * @version 1.0
 * @Description redis消息队列 有数据持久化能力,消费后消息会自动从存储中删除。 业务处理失败必须将异常抛出去，这样可以转存死性队列(名称=当前队列名_dlq)
 * @date
 */
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RedisQueueListener {

    /**
     * 队列名
     */
    String name();

    MessageModel messageModel() default MessageModel.Blockqueue;

    /**
     * 接收的消息类型
     *
     * @return msgType
     */
    Class<?> msgType() default String.class;

    /**
     * 序列化方式
     * <p>
     * 常用的有 SerializationCodec JsonJacksonCodec FstCodec等 pub必须要和sub保持一致,否则会发生异常
     */
    Class<? extends Codec> codec() default FstCodec.class;

}
